/*
 *所有关于Ok3w_Article类的业务代码应在此处编写
*可使用repository.调用常用方法，获取EF/Dapper等信息
*如果需要事务请使用repository.DbContextBeginTransaction
*也可使用DBServerProvider.手动获取数据库相关信息
*用户信息、权限、角色等使用UserContext.Current操作
*Ok3w_ArticleService对增、删、改查、导入、导出、审核业务代码扩展参照ServiceFunFilter
*/
using VOL.Core.BaseProvider;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
using System.Linq;
using VOL.Core.Utilities;
using System.Linq.Expressions;
using VOL.Core.Extensions;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using VOL.MyTable.IRepositories;
using System;
using System.Collections.Generic;
using VOL.Core.ManageUser;
using VOL.Core.DBManager;

namespace VOL.MyTable.Services
{
    public partial class Ok3w_ArticleService
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly IOk3w_ArticleRepository _repository;//访问数据库

        [ActivatorUtilitiesConstructor]
        public Ok3w_ArticleService(
            IOk3w_ArticleRepository dbRepository,
            IHttpContextAccessor httpContextAccessor
            )
        : base(dbRepository)
        {
            _httpContextAccessor = httpContextAccessor;
            _repository = dbRepository;
            //多租户会用到这init代码，其他情况可以不用
            //base.Init(dbRepository);
        }
        public override PageGridData<Ok3w_Article> GetPageData(PageDataOptions options)
        {
            /*System.Linq.Expressions.Expression<Func<Ok3w_Article, bool>> orFilter = null;
            QueryRelativeList = (List<SearchParameters> parameters) =>
            {
                //方式1：动态生成or查询条件
                foreach (var item in parameters)
                {
                    if (!string.IsNullOrEmpty(item.Value))
                    {
                        //注意:这里只需要判断or查询的字段，其他的字段不需要处理
                        //这里必须拷贝value值
                        string value = item.Value;
                        if (item.Name == "TranNo")
                        {
                            //进行or模糊查询
                            orFilter = orFilter.Or(x => x.Title.Contains(value));
                            //清空原来的数据
                            item.Value = null;
                        }
                        else if (item.Name == "SellNo")
                        {
                            //进行or等于查询
                            orFilter = orFilter.Or(x => x.Content == value);
                            //清空原来的数据
                            item.Value = null;
                        }
                    }
                }
                ///方式2：原生sql查询,需要自己处理sql注入问题(不建议使用此方法)
                //string sql = null;
                //foreach (var item in parameters)
                //{
                //    if (!string.IsNullOrEmpty(item.Value))
                //    {
                //        if (sql == null)
                //        {
                //            sql = "where 1=2";
                //        }
                //        string value = item.Value;
                //        //清空原来的数据
                //        item.Value = null;
                //        if (item.Name == "TranNo")
                //        {
                //            sql += $" or TranNo='{value}'";
                //            //清空原来的数据
                //            item.Value = null;
                //        }
                //        else if (item.Name == "SellNo")
                //        {
                //            sql += $" or SellNo='{value}'";
                //        }
                //    }
                //}
                //QuerySql = "select * from sellorder " + sql;
            };*/

            QueryRelativeExpression = (IQueryable<Ok3w_Article> queryable) =>
            {
               /* if (orFilter != null)
                {
                    queryable = queryable.Where(orFilter);
                }*/
                /* try
                 {
                     string vol = "";
                     if (!string.IsNullOrEmpty(options.Value.ToString()))
                     {
                         vol = options.Value.ToString();
                         Console.WriteLine(vol);
                     }
                 }
                 catch
                 {
                     return queryable;//未空说明从vol平台外部出来的
                 }*/
                if (options.Value==null)//从大屏过来的全部数据
                    return queryable;
                else {//从系统中访问
                    var user = UserContext.Current.GetUserInfo(UserContext.Current.UserId);
                    if (user.UserTrueName != null) queryable = queryable.Where(x => user.Role_Id == 1 || user.Role_Id == 2 || user.UserTrueName == x.Creator);//数据隔离
                    return queryable;
                }
                //Console.WriteLine();
                
            };
            return base.GetPageData(options);
        }

    }
}
